{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Frequent category imputation\n",
    "\n",
    "In the previous section we discussed the imputation of missing values in numerical variables. Categorical variables may also contain missing values. The methods of imputation share the same principle as those for numerical values.\n",
    "\n",
    "Replacement of missing values by the most frequent category is the equivalent of mean/median imputation. It consists of replacing all occurrences of missing values (NA) within a variable by the most frequent label or category of the variable.\n",
    "\n",
    "\n",
    "### Assumptions\n",
    "\n",
    "Replacement of NA by the most frequent category has the assumption that the data are missing completely at random (MCAR). The rationale is that the value that should have been seen for the missing observation is most likely the most frequent value or category.\n",
    "\n",
    "### Advantages\n",
    "\n",
    "- Easy to implement\n",
    "- Fast way of obtaining complete datasets\n",
    "\n",
    "### Limitations\n",
    "\n",
    "- Distortion the relation of the most frequent label with other variables within the dataset\n",
    "- May lead to an over-representation of the most frequent label if there is a big number of NA"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "===============================================================================\n",
    "\n",
    "## Real Life example: \n",
    "\n",
    "### Predicting Sale Price of Houses\n",
    "\n",
    "The problem at hand aims to predict the final sale price of homes based on different explanatory variables describing aspects of residential homes. Predicting house prices is useful to identify fruitful investments, or to determine whether the price advertised for a house is over or underestimated, before making a buying judgment.\n",
    "\n",
    "=============================================================================\n",
    "\n",
    "In the following cells, I will demonstrate NA imputation by most frequent category using the House Price datasets from Kaggle.\n",
    "\n",
    "If you haven't downloaded the dataset yet, in the lecture \"Guide to setting up your computer\" in section 1, you can find the details on how to do so."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "% matplotlib inline\n",
    "\n",
    "# for regression problems\n",
    "from sklearn.linear_model import LinearRegression, Ridge\n",
    "\n",
    "# to split and standarize the datasets\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "# to evaluate regression models\n",
    "from sklearn.metrics import mean_squared_error\n",
    "\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### House Price dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "SalePrice      0.000000\n",
       "BsmtQual       0.025342\n",
       "GarageType     0.055479\n",
       "FireplaceQu    0.472603\n",
       "dtype: float64"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# let's load the dataset with a few columns for the demonstration\n",
    "cols_to_use = ['BsmtQual', 'FireplaceQu', 'GarageType', 'SalePrice']\n",
    "\n",
    "data = pd.read_csv('houseprice.csv', usecols=cols_to_use)\n",
    "\n",
    "# let's inspect the percentage of missing values in each variable\n",
    "data.isnull().mean().sort_values(ascending=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The variables BsmtQual and GarageType contain only a few observations with NA (2.5 and 5 %, respectively), therefore, replacing those observations with the value of the most frequent category is a good approach. \n",
    "\n",
    "On the other hand, the variable FireplaceQu, contains missing data in  almost half of the observations. Therefore, replacing those with the most frequent category is most likely going to distort the relationship of the most frequent category with the sale price. In addition, if so many observations contain missing values, it has to be for a reason, so we would be better off capturing missingness somehow. In future lectures, I will show how to capture missingness in categorical variables."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Imputation important\n",
    "\n",
    "Imputation should be done over the training set, and then propagated to the test set. This means that the most frequent category has to be selected from the training set, and used to replace NA both in train and test sets."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((1022, 3), (438, 3))"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# let's separate into training and testing set\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(data[['BsmtQual', 'FireplaceQu', 'GarageType']],\n",
    "                                                    data.SalePrice, test_size=0.3,\n",
    "                                                    random_state=0)\n",
    "X_train.shape, X_test.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Let's inspect the frequency of the labels in the different variables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0xb10d91518>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEOCAYAAACHE9xHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAD9ZJREFUeJzt3X+s3XV9x/Hny/LL6XSQXpuGMi9L6lwxo2DT6ZybozHU\nYSybEyqb9g8yFoOJOhdXzLJNt7pOndkPwQTxRxeXQZ1O6o/MYYWhxlgvWH4UqTQWRkmhVbf4Y0uV\n8t4f59txVu+Pc3vP4XA/Ph8JOd/v93zPOe97Ak++93t+3FQVkqR2PWXcA0iSRsvQS1LjDL0kNc7Q\nS1LjDL0kNc7QS1LjDL0kNc7QS1LjDL0kNe6kcQ8AsHTp0pqcnBz3GJK0qNx2223fqqqJufZ7UoR+\ncnKSqampcY8hSYtKkgcG2c9TN5LUOEMvSY0z9JLUOEMvSY0z9JLUOEMvSY0z9JLUOEMvSY0z9JLU\nuCfFJ2NHYXLzp8c9wkDu33rRuEeQ1DiP6CWpcYZekhpn6CWpcYZekhpn6CWpcYZekhpn6CWpcYZe\nkhpn6CWpcYZekhpn6CWpcYZekhpn6CWpcc1+e6WGy28DlRYvj+glqXGGXpIaZ+glqXGGXpIaZ+gl\nqXGGXpIaZ+glqXGGXpIaZ+glqXEDhz7JkiRfS/Kpbv2MJDclua+7PL1v36uS7EuyN8mFoxhckjSY\n+RzRvwH4et/6ZmBnVa0EdnbrJFkFbATOAdYD1yRZMpxxJUnzNVDok6wALgKu69u8AdjWLW8DLu7b\nfn1VHamq/cA+YO1wxpUkzdegR/R/A7wFeKxv27KqOtgtPwws65bPBB7s2+9At02SNAZzhj7Jy4FD\nVXXbTPtUVQE1nwdOckWSqSRThw8fns9NJUnzMMgR/YuAVyS5H7geuCDJR4BHkiwH6C4Pdfs/BJzV\nd/sV3bb/p6qurao1VbVmYmJiAT+CJGk2c4a+qq6qqhVVNUnvRdbPV9XvAjuATd1um4Abu+UdwMYk\npyY5G1gJ7Br65JKkgSzkD49sBbYnuRx4ALgEoKr2JNkO3AM8ClxZVUcXPKkk6YTMK/RVdQtwS7f8\nbWDdDPttAbYscDZJ0hD4yVhJapyhl6TGGXpJapyhl6TGGXpJapyhl6TGGXpJapyhl6TGGXpJapyh\nl6TGGXpJapyhl6TGGXpJapyhl6TGGXpJapyhl6TGGXpJapyhl6TGGXpJapyhl6TGGXpJapyhl6TG\nGXpJapyhl6TGGXpJapyhl6TGGXpJapyhl6TGGXpJapyhl6TGGXpJapyhl6TGGXpJapyhl6TGGXpJ\napyhl6TGzRn6JKcl2ZXkjiR7kryt235GkpuS3Nddnt53m6uS7EuyN8mFo/wBJEmzG+SI/ghwQVWd\nC6wG1id5AbAZ2FlVK4Gd3TpJVgEbgXOA9cA1SZaMYnhJ0tzmDH31fL9bPbn7p4ANwLZu+zbg4m55\nA3B9VR2pqv3APmDtUKeWJA1soHP0SZYk2Q0cAm6qqq8Ay6rqYLfLw8CybvlM4MG+mx/oth1/n1ck\nmUoydfjw4RP+ASRJsxso9FV1tKpWAyuAtUmed9z1Re8of2BVdW1VramqNRMTE/O5qSRpHub1rpuq\n+i/gZnrn3h9JshyguzzU7fYQcFbfzVZ02yRJYzDIu24mkvxMt/xU4KXAvcAOYFO32ybgxm55B7Ax\nyalJzgZWAruGPbgkaTAnDbDPcmBb986ZpwDbq+pTSb4MbE9yOfAAcAlAVe1Jsh24B3gUuLKqjo5m\nfEnSXOYMfVXdCZw3zfZvA+tmuM0WYMuCp5MkLZifjJWkxhl6SWqcoZekxhl6SWqcoZekxhl6SWqc\noZekxhl6SWqcoZekxhl6SWqcoZekxhl6SWqcoZekxhl6SWqcoZekxhl6SWqcoZekxhl6SWqcoZek\nxhl6SWqcoZekxhl6SWqcoZekxhl6SWqcoZekxhl6SWqcoZekxhl6SWqcoZekxhl6SWqcoZekxhl6\nSWqcoZekxhl6SWqcoZekxhl6SWrcnKFPclaSm5Pck2RPkjd0289IclOS+7rL0/tuc1WSfUn2Jrlw\nlD+AJGl2gxzRPwq8uapWAS8ArkyyCtgM7KyqlcDObp3uuo3AOcB64JokS0YxvCRpbnOGvqoOVtXt\n3fL3gK8DZwIbgG3dbtuAi7vlDcD1VXWkqvYD+4C1wx5ckjSYeZ2jTzIJnAd8BVhWVQe7qx4GlnXL\nZwIP9t3sQLft+Pu6IslUkqnDhw/Pc2xJ0qAGDn2SpwMfA95YVd/tv66qCqj5PHBVXVtVa6pqzcTE\nxHxuKkmah4FCn+RkepH/x6r6eLf5kSTLu+uXA4e67Q8BZ/XdfEW3TZI0BoO86ybAB4CvV9V7+q7a\nAWzqljcBN/Zt35jk1CRnAyuBXcMbWZI0HycNsM+LgNcAdyXZ3W17K7AV2J7kcuAB4BKAqtqTZDtw\nD7137FxZVUeHPrkkaSBzhr6qvghkhqvXzXCbLcCWBcwlSRoSPxkrSY0z9JLUOEMvSY0z9JLUOEMv\nSY0z9JLUOEMvSY0z9JLUOEMvSY0z9JLUOEMvSY0z9JLUOEMvSY0z9JLUOEMvSY0z9JLUOEMvSY0z\n9JLUOEMvSY0z9JLUOEMvSY0z9JLUOEMvSY0z9JLUOEMvSY0z9JLUOEMvSY0z9JLUOEMvSY0z9JLU\nOEMvSY0z9JLUOEMvSY0z9JLUOEMvSY2bM/RJPpjkUJK7+7adkeSmJPd1l6f3XXdVkn1J9ia5cFSD\nS5IGM8gR/YeB9cdt2wzsrKqVwM5unSSrgI3AOd1trkmyZGjTSpLmbc7QV9WtwHeO27wB2NYtbwMu\n7tt+fVUdqar9wD5g7ZBmlSSdgBM9R7+sqg52yw8Dy7rlM4EH+/Y70G2TJI3Jgl+MraoCar63S3JF\nkqkkU4cPH17oGJKkGZxo6B9JshyguzzUbX8IOKtvvxXdth9TVddW1ZqqWjMxMXGCY0iS5nKiod8B\nbOqWNwE39m3fmOTUJGcDK4FdCxtRkrQQJ821Q5J/Al4CLE1yAPhTYCuwPcnlwAPAJQBVtSfJduAe\n4FHgyqo6OqLZJUkDmDP0VfXqGa5aN8P+W4AtCxlKkjQ8fjJWkhpn6CWpcYZekho35zl6ScM3ufnT\n4x5hIPdvvWjcI2gIPKKXpMYZeklqnKGXpMYZeklqnKGXpMYZeklqnKGXpMYZeklqnKGXpMYZeklq\nnKGXpMYZeklqnKGXpMYZeklqnKGXpMYZeklqnKGXpMYZeklqnKGXpMYZeklqnKGXpMYZeklqnKGX\npMYZeklqnKGXpMadNO4BJGkhJjd/etwjDOT+rReN7bE9opekxhl6SWqcoZekxhl6SWqcoZekxhl6\nSWrcyEKfZH2SvUn2Jdk8qseRJM1uJKFPsgS4GngZsAp4dZJVo3gsSdLsRnVEvxbYV1XfrKofAtcD\nG0b0WJKkWYwq9GcCD/atH+i2SZKeYGP7CoQkVwBXdKvfT7J3XLPMw1LgW8O8w/zVMO9t0fH5HC6f\nz+FZLM/lswfZaVShfwg4q299Rbft/1TVtcC1I3r8kUgyVVVrxj1HK3w+h8vnc3haey5Hdermq8DK\nJGcnOQXYCOwY0WNJkmYxkiP6qno0yeuBzwJLgA9W1Z5RPJYkaXYjO0dfVZ8BPjOq+x+TRXWqaRHw\n+Rwun8/haeq5TFWNewZJ0gj5FQiS1DhDL0mNM/TzkORXklw97jkkaT78m7FzSHIecBnwKmA/8PHx\nTrT4JDl/tuur6vYnapbWJLm8qj7Qt74E+OOqetsYx9KTjKGfRpLnAK/u/vkWcAO9F65/fayDLV5/\n3V2eBqwB7gAC/CIwBbxwTHO1YF2SVwKXA2cAHwb+fawTLVJJXgD8PfALwCn03hr+g6p6xlgHGwJD\nP717gS8AL6+qfQBJ3jTekRavY/+DTPJx4Pyquqtbfx7wZ2McbdGrqsuSXArcBfwAuKyqvjTmsRar\n99L7cOdH6R2QvBZ4zlgnGhLP0U/vt4CDwM1J3p9kHb0jUC3Mzx+LPEBV3U3v6EknKMlK4A3Ax4AH\ngNck+anxTrV4dQd2S6rqaFV9CFg/7pmGwSP66X2qqj6R5Gn0vl75jcCzkrwP+Jeq+rfxjrdo3Znk\nOuAj3frvAHeOcZ4WfBK4sqp2JgnwB/S+guSc8Y61KP1395Utu5O8k97BXhMHw35gahpJbq+q84/b\ndjq9F2Qvrap145lscUtyGvA64MXdpluB91XVkfFNtbgleUZVffe4bc+pqm+Ma6bFKsmzgUfonZ9/\nE/BM4Jpjp28XM0M/jSRfq6rzxj1HK5JsAFZU1dXd+i5gAijgLVX1z+OcbzFK8paqeme3/Kqq+mjf\nde+oqreOb7rFJcnPVtV/jHuOUTL000hyAHjPTNdX1YzX6ccl+RKwsaoe7NZ3AxcATwc+5G9I89f/\nW+fxv4FO9xupZnbcc/mxqnrluGcaNs/RT28JvQj5AuxwnHIs8p0vVtV3gO90r4No/jLD8nTrml3/\n8/VzY5tihAz99A5W1dvHPURDTu9fqarX961OPMGztKJmWJ5uXbOb7blsgqGfnkdEw/WVJL9XVe/v\n35jk94FdY5ppsTs3yXfp/bv61G6Zbv208Y21KM32XFYLH5jyHP00kpzRnVrQECR5FvAJ4Ahw7OsO\nng+cClxcVY+MazbpJ4Gh1xMmyQU8/v7uPVX1+XHOI/2kMPSS1LgmPvUlSZqZoZekxhl6LXpJjibZ\nneSOJLcn+eUh3OfqJL9x3LaLk9yZ5N4kdyf57QXc/2SSuxc6pzQI316pFvxPVa0GSHIh8JfAry3w\nPlfT+6raz3T3ey7wbuClVbU/ydnA55Lsr6rbFvhY0kh5RK/WPAP4T4Aky5Pc2h3t353kxd327yd5\nV5I9ST6XZG2SW5J8M8krum8wfDtwaXfbS4E/BN5RVfsBust3AG/u7vOWJGu65aVJ7u+WJ5N8oftN\nYyi/bUjzZejVgqd2Qb4XuA748277ZcBnu6P9c4Hd3fanAZ+vqnOA7wF/AbwU+E3g7VX1Q+BPgBuq\nanVV3UDvbaHHH7lPAavmmO0Qvd8CzgcuBf5uAT+ndEI8daMW9J+6eSHwD91fr/oq8MEkJwOfqKpj\nof8h8K/d8l3Akar6UZK7gMkhz3Yy8N4kq4GjNPIXi7S4eESvplTVl4GlwERV3Qr8KvAQ8OEkr+12\n+1E9/gGSx+h9YpeqeoyZD37uofdp3n7Pp3dUD/Aoj//31P8VBG+i9x3n59I753/KCfxY0oIYejUl\nyXPpffvot4/9IYnuO3auA+bz1b3fA366b/3dwFVJJrvHmaT3l8fe1V1/P4//j6D/3TjPpPcleY8B\nr+lmk55Qhl4tOHaOfjdwA7Cpqo4CLwHuSPI1eufH/3Ye93kzsOrYi7HdaZ8/Aj6Z5BvAN4DXVdXe\nbv93A6/rHmtp3/1cA2xKcgfwXHp/wFt6QvkVCNIJSLIV+CXgwu7FW+lJy9BLUuM8dSNJjTP0ktQ4\nQy9JjTP0ktQ4Qy9JjTP0ktQ4Qy9JjftfwOTuHX6GDFAAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xb10d53eb8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "X_train.groupby(['BsmtQual'])['BsmtQual'].count().sort_values(ascending=False).plot.bar()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0xb111940b8>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xb10e7d588>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "X_train.groupby(['FireplaceQu'])['FireplaceQu'].count().sort_values(ascending=False).plot.bar()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0xb1120feb8>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nlO8Hd+xzjqT1km6XdHI/DyAiInavmzP6+4Bn2T4WeBJwiqQTgLOB1bbnAKvLOpLmAouAY4BTgPMk\nTelH8RERMbpRg96NX5TVh5UvAwuBFaV9BXBaWV4IXGz7Ptt3AuuB+T2tOiIiutZVH72kKZJuBLYC\nV9r+DjDD9l1lk7uBGWX5MGBTx+6bS1tERLSgq6C3vcP2k4CZwHxJTxz2umnO8rsmaYmktZLWbtu2\nbSy7RkTEGIzprhvbPwO+RtP3fo+kQwHK961lsy3ArI7dZpa24T9rue15tudNnz59T2qPiIgudHPX\nzXRJB5Xl/YFnA98DVgGLy2aLgcvL8ipgkaR9JR0BzAHW9LrwiIjoztQutjkUWFHunNkHWGn7C5K+\nBayUdCawETgdwPY6SSuBW4HtwFLbO/pTfkREjGbUoLd9E3DcCO0/BhbsYp9lwLJxVxcREeOWJ2Mj\nIiqXoI+IqFyCPiKicgn6iIjKJegjIirXze2V0ZLZZ39xQt9vw7nPm9D3i4iJkTP6iIjKJegjIiqX\noI+IqFyCPiKicgn6iIjKJegjIiqXoI+IqFyCPiKicgn6iIjKJegjIiqXoI+IqFyCPiKicgn6iIjK\nJegjIiqXoI+IqFyCPiKicgn6iIjKJegjIiqXoI+IqNyoQS9plqSvSbpV0jpJbyjt0yRdKemO8v3g\njn3OkbRe0u2STu7nAURExO51c0a/HXiz7bnACcBSSXOBs4HVtucAq8s65bVFwDHAKcB5kqb0o/iI\niBjdqEFv+y7b15fle4HbgMOAhcCKstkK4LSyvBC42PZ9tu8E1gPze114RER0Z0x99JJmA8cB3wFm\n2L6rvHQ3MKMsHwZs6thtc2mLiIgWdB30kh4FfBZ4o+2fd75m24DH8saSlkhaK2nttm3bxrJrRESM\nQVdBL+lhNCF/oe3PleZ7JB1aXj8U2FratwCzOnafWdp2Ynu57Xm2502fPn1P64+IiFF0c9eNgI8D\nt9l+b8dLq4DFZXkxcHlH+yJJ+0o6ApgDrOldyRERMRZTu9jmRODlwM2SbixtbwXOBVZKOhPYCJwO\nYHudpJXArTR37Cy1vaPnlUdERFdGDXrb/w5oFy8v2MU+y4Bl46grIiJ6JE/GRkRULkEfEVG5BH1E\nROUS9BERlUvQR0RULkEfEVG5BH1EROUS9BERlUvQR0RULkEfEVG5BH1EROUS9BERlUvQR0RULkEf\n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\nRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xb12242048>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "X_train.groupby(['GarageType'])['GarageType'].count().sort_values(ascending=False).plot.bar()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The first 2 variables show 2 predominant categories (first 2 plots). The third variable shows one predominant category. By predominant, I mean category that contains the majority of the observations."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'Attchd'"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# with this command we capture the most frequent label (check output with plot above)\n",
    "X_train.groupby(['GarageType'])['GarageType'].count().sort_values(ascending=False).index[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# let's create a variable to replace NA with the most frequent label\n",
    "# both in train and test set\n",
    "\n",
    "def impute_na(df_train, df_test, variable):\n",
    "    most_frequent_category = df_train.groupby([variable])[variable].count().sort_values(ascending=False).index[0]\n",
    "    df_train[variable].fillna(most_frequent_category, inplace=True)\n",
    "    df_test[variable].fillna(most_frequent_category, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# and let's replace the NA\n",
    "for variable in ['BsmtQual', 'FireplaceQu', 'GarageType',]:\n",
    "    impute_na(X_train, X_test, variable)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "BsmtQual       0\n",
       "FireplaceQu    0\n",
       "GarageType     0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# let's check that NA have been replaced by inspecting the percentage of null values\n",
    "X_train.isnull().sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "BsmtQual       0\n",
       "FireplaceQu    0\n",
       "GarageType     0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_test.isnull().sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>BsmtQual</th>\n",
       "      <th>FireplaceQu</th>\n",
       "      <th>GarageType</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>64</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>682</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>960</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1384</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1100</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      BsmtQual  FireplaceQu  GarageType\n",
       "64           0            0           0\n",
       "682          0            0           0\n",
       "960          1            0           0\n",
       "1384         1            0           1\n",
       "1100         1            0           1"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# let's transform the categories into numbers quickly and dirty so we can use them in scikit-learn\n",
    "# the below function numbers the labels from 0 to n, n being the number of different labels \n",
    "#  within the variable\n",
    "\n",
    "for col in ['BsmtQual', 'FireplaceQu', 'GarageType',]:\n",
    "    labels_dict = {k:i for i, k in enumerate(X_train[col].unique(), 0)}\n",
    "    X_train.loc[:, col] = X_train.loc[:, col].map(labels_dict )\n",
    "    X_test.loc[:, col] = X_test.loc[:, col].map(labels_dict)\n",
    "    \n",
    "X_train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Linear Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train set\n",
      "Linear Regression mse: 5508120196.474013\n",
      "Test set\n",
      "Linear Regression mse: 6364449797.852686\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# Let's evaluate the performance of Linear Regression\n",
    "\n",
    "linreg = LinearRegression()\n",
    "linreg.fit(X_train, y_train)\n",
    "print('Train set')\n",
    "pred = linreg.predict(X_train)\n",
    "print('Linear Regression mse: {}'.format(mean_squared_error(y_train, pred)))\n",
    "print('Test set')\n",
    "pred = linreg.predict(X_test)\n",
    "print('Linear Regression mse: {}'.format(mean_squared_error(y_test, pred)))\n",
    "print()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "As you can see, imputation by the most frequent category is a straightforward approach to complete datasets to use in machine learning.\n",
    "\n",
    "### How did these feature pre-processing affect the original variable?\n",
    "\n",
    "I mentioned previously that the variable FireplaceQu contained a high percentage of missing data. Therefore, very likely, replacing those observations by the most frequent category will affect the distribution of House prices within that label. \n",
    "\n",
    "Let's go ahead and have a look at how this imputation method affects variables when the number of missing values is high."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "BsmtQual       0.023483\n",
       "FireplaceQu    0.467710\n",
       "GarageType     0.052838\n",
       "SalePrice      0.000000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# let's recreate a training set where data are missing for FireplpaceQu\n",
    "\n",
    "# we do the split again over the original dataset, with the same seed, so that we obtain the same split\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(data[['BsmtQual', 'FireplaceQu', 'GarageType', 'SalePrice']],\n",
    "                                                    data.SalePrice, test_size=0.3,\n",
    "                                                    random_state=0)\n",
    "\n",
    "# and now we check the missing values\n",
    "X_train.isnull().mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0xb10e1bc50>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY0AAAEOCAYAAAB1g0unAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGmxJREFUeJzt3X+w1fWd3/HnK2CUJqsBvbEukMWMZFt0E1xvCZlN02zo\nAkk6i2k0wW0jnaWSrm6atNlmNO0MiQ4d3W7ijFu1xYWI7m6UNRppoqFE7ebHrMDVqAiGeidghRIl\nXlY22cgG8uof53PL4eRy74d7L/cL3Ndj5sz5ft/f7+dzPuco93W+3+/nnCPbRERE1Hhd0wOIiIiT\nR0IjIiKqJTQiIqJaQiMiIqolNCIiolpCIyIiqiU0IiKiWkIjIiKqJTQiIqLaxKYHMNrOOeccz5gx\no+lhREScVJ544okf2e4aar9TLjRmzJhBT09P08OIiDipSHqhZr+cnoqIiGoJjYiIqJbQiIiIagmN\niIioltCIiIhqCY2IiKg2ZGhIOkPSJklPS9oq6fOl/jlJuyU9VW4faGtznaReSdslLWirXyJpS9l2\niySV+umS7i31jZJmtLVZIun5clsymk8+IiKOTc3nNA4A77P9Y0mnAd+R9HDZdrPtP2rfWdIsYDFw\nIfDLwDclvc32IeB24CpgI/AQsBB4GFgK7LN9gaTFwE3ARyVNAZYD3YCBJySts71vZE87IiKGY8gj\nDbf8uKyeVm6D/bD4IuAe2wds7wB6gTmSzgPOtP24Wz9MfhdwaVubNWX5PmBeOQpZAGyw3VeCYgOt\noImIiAZUfSJc0gTgCeAC4FbbGyW9H/iEpCuBHuDT5Q/7VODxtua7Su1nZbmzTrl/EcD2QUmvAme3\n1wdo0z6+ZcAygLe85S01T2lQM679+oj7GA07b/xg00OIiDhC1YVw24dszwam0TpquIjWqaa3ArOB\nPcAXjtsohx7fStvdtru7uob86pSIiBimY5o9ZfuvgceAhbZfKmHyc+AOYE7ZbTcwva3ZtFLbXZY7\n60e0kTQROAt4ZZC+IiKiATWzp7okvaksTwJ+C/h+uUbR70PAs2V5HbC4zIg6H5gJbLK9B9gvaW65\nXnEl8GBbm/6ZUZcBj5brHuuB+ZImS5oMzC+1iIhoQM01jfOANeW6xuuAtba/JuluSbNpXRTfCXwc\nwPZWSWuBbcBB4JoycwrgauBOYBKtWVP9s7BWAXdL6gX6aM2+wnafpBuAzWW/6233jeD5RkTECAwZ\nGrafAS4eoP6xQdqsAFYMUO8BLhqg/hpw+VH6Wg2sHmqcERFx/OUT4RERUS2hERER1RIaERFRLaER\nERHVEhoREVEtoREREdUSGhERUS2hERER1RIaERFRLaERERHVEhoREVEtoREREdUSGhERUS2hERER\n1RIaERFRLaERERHVEhoREVEtoREREdUSGhERUS2hERER1YYMDUlnSNok6WlJWyV9vtSnSNog6fly\nP7mtzXWSeiVtl7SgrX6JpC1l2y2SVOqnS7q31DdKmtHWZkl5jOclLRnNJx8REcem5kjjAPA+2+8A\nZgMLJc0FrgUesT0TeKSsI2kWsBi4EFgI3CZpQunrduAqYGa5LSz1pcA+2xcANwM3lb6mAMuBdwJz\ngOXt4RQREWNryNBwy4/L6mnlZmARsKbU1wCXluVFwD22D9jeAfQCcySdB5xp+3HbBu7qaNPf133A\nvHIUsgDYYLvP9j5gA4eDJiIixljVNQ1JEyQ9BbxM64/4RuBc23vKLj8Ezi3LU4EX25rvKrWpZbmz\nfkQb2weBV4GzB+krIiIaUBUatg/Zng1Mo3XUcFHHdtM6+miEpGWSeiT17N27t6lhRESc8o5p9pTt\nvwYeo3WK6KVyyoly/3LZbTcwva3ZtFLbXZY760e0kTQROAt4ZZC+Ose10na37e6urq5jeUoREXEM\namZPdUl6U1meBPwW8H1gHdA/m2kJ8GBZXgcsLjOizqd1wXtTOZW1X9Lccr3iyo42/X1dBjxajl7W\nA/MlTS4XwOeXWkRENGBixT7nAWvKDKjXAWttf03SXwFrJS0FXgA+AmB7q6S1wDbgIHCN7UOlr6uB\nO4FJwMPlBrAKuFtSL9BHa/YVtvsk3QBsLvtdb7tvJE84IiKGb8jQsP0McPEA9VeAeUdpswJYMUC9\nB7hogPprwOVH6Ws1sHqocUZExPGXT4RHRES1hEZERFRLaERERLWERkREVEtoREREtYRGRERUS2hE\nRES1hEZERFRLaERERLWERkREVEtoREREtYRGRERUS2hERES1hEZERFRLaERERLWERkREVEtoRERE\ntYRGRERUS2hERES1hEZERFRLaERERLUhQ0PSdEmPSdomaaukT5b65yTtlvRUuX2grc11knolbZe0\noK1+iaQtZdstklTqp0u6t9Q3SprR1maJpOfLbcloPvmIiDg2Eyv2OQh82vaTkn4JeELShrLtZtt/\n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\nIyLi6GZc+/WmhwDAzhs/OCaPkyONiIioltCIiIhqCY2IiKiW0IiIiGoJjYiIqJbQiIiIagmNiIio\nltCIiIhqCY2IiKiW0IiIiGoJjYiIqJbQiIiIagmNiIioNmRoSFot6WVJz7bVpkjaIOn5cj+5bdt1\nknolbZe0oK1+iaQtZdstklTqp0u6t9Q3SprR1mZJeYznJS0ZrScdERHDU3OkcSewsKN2LfCI7ZnA\nI2UdSbOAxcCFpc1tkiaUNrcDVwEzy62/z6XAPtsXADcDN5W+pgDLgXcCc4Dl7eEUERFjb8jQsP0t\noK+jvAhYU5bXAJe21e+xfcD2DqAXmCPpPOBM24/bNnBXR5v+vu4D5pWjkAXABtt9tvcBG/jF8IqI\niDE03Gsa59reU5Z/CJxblqcCL7btt6vUppblzvoRbWwfBF4Fzh6kr4iIaMiIL4SXIwePwliGTdIy\nST2Sevbu3dvkUCIiTmnDDY2Xyiknyv3Lpb4bmN6237RS212WO+tHtJE0ETgLeGWQvn6B7ZW2u213\nd3V1DfMpRUTEUIYbGuuA/tlMS4AH2+qLy4yo82ld8N5UTmXtlzS3XK+4sqNNf1+XAY+Wo5f1wHxJ\nk8sF8PmlFhERDZk41A6Svgy8FzhH0i5aM5puBNZKWgq8AHwEwPZWSWuBbcBB4Brbh0pXV9OaiTUJ\neLjcAFYBd0vqpXXBfXHpq0/SDcDmst/1tjsvyEdExBgaMjRsX3GUTfOOsv8KYMUA9R7gogHqrwGX\nH6Wv1cDqocYYERFjI58Ij4iIagmNiIioltCIiIhqCY2IiKiW0IiIiGoJjYiIqJbQiIiIagmNiIio\nltCIiIhqCY2IiKiW0IiIiGoJjYiIqJbQiIiIagmNiIioltCIiIhqCY2IiKiW0IiIiGoJjYiIqJbQ\niIiIagmNiIioltCIiIhqIwoNSTslbZH0lKSeUpsiaYOk58v95Lb9r5PUK2m7pAVt9UtKP72SbpGk\nUj9d0r2lvlHSjJGMNyIiRmY0jjR+0/Zs291l/VrgEdszgUfKOpJmAYuBC4GFwG2SJpQ2twNXATPL\nbWGpLwX22b4AuBm4aRTGGxERw3Q8Tk8tAtaU5TXApW31e2wfsL0D6AXmSDoPONP247YN3NXRpr+v\n+4B5/UchEREx9kYaGga+KekJSctK7Vzbe8ryD4Fzy/JU4MW2trtKbWpZ7qwf0cb2QeBV4OzOQUha\n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\nVsgWoaWKAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xb10d53ba8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# let's inspect the average house price per category /  label within the variable FireplaceQu\n",
    "\n",
    "X_train.groupby(['FireplaceQu'])['SalePrice'].mean().sort_values(ascending=False).plot.bar()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And then compare with the average  house price when this variable has missing observations."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "140740.83263598327"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train[X_train.FireplaceQu.isnull()]['SalePrice'].mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that the average price for the most frequent category Gd is around 200,000, whereas the average price for houses with missing observations is 140,000.\n",
    "\n",
    "Let's plot the 2 distributions together for a clearer view of the distribution of prices."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0xb12868f28>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nq9CqZ/4UAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xb1226a5c0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure()\n",
    "ax = fig.add_subplot(111)\n",
    "X_train[X_train.FireplaceQu=='Gd']['SalePrice'].plot(kind='kde', ax=ax)\n",
    "X_train[X_train.FireplaceQu.isnull()]['SalePrice'].plot(kind='kde', ax=ax, color='red')\n",
    "lines, labels = ax.get_legend_handles_labels()\n",
    "labels = ['Gd', 'Missing observations']\n",
    "ax.legend(lines, labels, loc='best')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "When values are missing for FirePlace, the average house price is around USS 140k. On the other hand, the average house price for the most frequent label (Gd), is over USS 200k. Thus, we can anticipate that replacing the missing observations by the most frequent label Gd is likely going to take the average of the house price down for that label. And this may affect the performance of the algorithm."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Gd    255\n",
       "TA    229\n",
       "Fa     26\n",
       "Ex     18\n",
       "Po     16\n",
       "Name: FireplaceQu, dtype: int64"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# let's check how many observations we have per category\n",
    "X_train.FireplaceQu.value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Gd    733\n",
       "TA    229\n",
       "Fa     26\n",
       "Ex     18\n",
       "Po     16\n",
       "Name: FireplaceQu, dtype: int64"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# let's create a copy of the dataframe\n",
    "temp = X_train.copy()\n",
    "\n",
    "# fill the missing values with 'Ex'\n",
    "impute_na(X_train, X_test, 'FireplaceQu')\n",
    "\n",
    "X_train.FireplaceQu.value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The imputation by most frequent category takes the number of houses with the label 'Gd' from 255 in the original dataset, to 733! Therefore, this might have a big impact on the distribution of Sale Price for that category. Let's  have a look."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>FireplaceQu</th>\n",
       "      <th>SalePrice</th>\n",
       "      <th>Fireplace_imputed</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>64</th>\n",
       "      <td>NaN</td>\n",
       "      <td>219500</td>\n",
       "      <td>Gd</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>682</th>\n",
       "      <td>Gd</td>\n",
       "      <td>173000</td>\n",
       "      <td>Gd</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>960</th>\n",
       "      <td>NaN</td>\n",
       "      <td>116500</td>\n",
       "      <td>Gd</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1384</th>\n",
       "      <td>NaN</td>\n",
       "      <td>105000</td>\n",
       "      <td>Gd</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1100</th>\n",
       "      <td>NaN</td>\n",
       "      <td>60000</td>\n",
       "      <td>Gd</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     FireplaceQu  SalePrice Fireplace_imputed\n",
       "64           NaN     219500                Gd\n",
       "682           Gd     173000                Gd\n",
       "960          NaN     116500                Gd\n",
       "1384         NaN     105000                Gd\n",
       "1100         NaN      60000                Gd"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# let's put all the variables within one new dataframe so we can plot them within one plot\n",
    "temp = pd.concat([temp[['FireplaceQu', 'SalePrice']], X_train.FireplaceQu], axis=1)\n",
    "temp.columns = ['FireplaceQu', 'SalePrice', 'Fireplace_imputed']\n",
    "temp.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0xb128d5cf8>"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xb1288fa58>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure()\n",
    "ax = fig.add_subplot(111)\n",
    "temp[temp.FireplaceQu=='Gd']['SalePrice'].plot(kind='kde', ax=ax)\n",
    "temp[temp.FireplaceQu.isnull()]['SalePrice'].plot(kind='kde', ax=ax, color='red')\n",
    "temp[temp.Fireplace_imputed=='Gd']['SalePrice'].plot(kind='kde', ax=ax, color='green')\n",
    "lines, labels = ax.get_legend_handles_labels()\n",
    "labels = ['Gd', 'Missing observations', 'Gd + missing']\n",
    "ax.legend(lines, labels, loc='best')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The average House value for the most frequent category has decreased quite dramatically after adding the house values of the NA, following re-categorisation of NA as the most frequent label.\n",
    "\n",
    "Thus, the importance of this particular label for prediction of house price, is masked or changed by the addition of missing values. \n",
    "\n",
    "In cases like this, when the percentage of missing values is so high (~50%) we are better off creating a new category to enclose the observations with NA. I will show this in the next lecture."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**That is all for this demonstration. I hope you enjoyed the notebook, and see you in the next one.**"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.1"
  },
  "toc": {
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": "block",
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
